home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / graphic / tweak16b.zip / REGISTER.HPP < prev    next >
C/C++ Source or Header  |  1993-08-04  |  3KB  |  92 lines

  1. /*
  2.     Register.hpp version 1.0
  3.     by Robert Schmidt of Ztiff Zox Softwear 1993
  4.  
  5.     Declares the Register class, members defined in Register.cpp.
  6. */
  7.  
  8. #ifndef _Register_HPP
  9. #define _Register_HPP
  10.  
  11. #include <iostream.h>
  12.  
  13. /*
  14.     xxxxADDR defines the base port number used to access VGA component xxxx,
  15.     and is defined for xxxx =
  16.         ATTRCON        -    Attribute Controller
  17.         MISC        -    Miscellaneous Register
  18.         VGAENABLE    -    VGA Enable Register
  19.         SEQ            -    Sequencer
  20.         GRACON        -    Graphics Controller
  21.         CRTC        -    Cathode Ray Tube Controller
  22.         STATUS        -    Status Register
  23. */
  24.  
  25. #define ATTRCON_ADDR    0x3c0
  26. #define MISC_ADDR        0x3c2
  27. #define VGAENABLE_ADDR    0x3c3
  28. #define SEQ_ADDR        0x3c4
  29. #define GRACON_ADDR        0x3ce
  30. #define CRTC_ADDR        0x3d4
  31. #define STATUS_ADDR        0x3da
  32.  
  33. // SVGA specific registers here:
  34.  
  35. #define CHIPSTECH               0x3d6
  36.  
  37.  
  38. class    Register
  39.     {
  40.     unsigned        port;
  41.     unsigned char    index;
  42.     unsigned char    value;
  43. public:
  44.     Register(unsigned p=0, unsigned char i=0, unsigned char v=0)
  45.         { init(p,i,v); }
  46.     unsigned char init(unsigned p, unsigned char i, unsigned char v)
  47.         { port = p; index = i; return value = v; }
  48.     unsigned char init(Register& r)
  49.         { port = r.port; index = r.index; return value = r.value; }
  50.     void setPort(unsigned p)        { port = p; }
  51.     void setIndex(unsigned char i)    { index = i; }
  52.     void setValue(unsigned char v)    { value = v; }
  53.     unsigned getPort(void) const    { return port; }
  54.     unsigned char getIndex(void) const { return index; }
  55.     unsigned char getValue(void) const { return value; }
  56.     unsigned char operator++(void)    { return value++; }
  57.     unsigned char operator--(void)    { return value--; }
  58.     unsigned char operator++(int)    { return ++value; }
  59.     unsigned char operator--(int)    { return --value; }
  60.     unsigned char &operator *()        { return value; }
  61.     unsigned char operator=(Register &r)
  62.         { return init(r); }
  63.     unsigned operator() (int rbit, int len)
  64.         { return (value >> rbit) & (1 << len)-1; }
  65.  
  66.     void out();
  67.     unsigned char in();
  68.  
  69.     friend istream& operator>> (istream&, Register&);
  70.     friend ostream& operator<< (ostream&, Register&);
  71.     };
  72.  
  73.  
  74. class NamedRegister : public Register
  75.     {
  76.     char             *name;
  77.     char            enableFlag;
  78. public:
  79.     NamedRegister()                    { doEnable(); }
  80.     ~NamedRegister()                { delete name; }
  81.     void doEnable()                    { enableFlag = 1; }
  82.     void doDisable()                { enableFlag = 0; }
  83.     void toggleEnable()                { enableFlag = !enableFlag; }
  84.     char isEnabled()                { return enableFlag; }
  85.     char *getName()                    { return name; }
  86.     void printCon();
  87.  
  88.     friend istream& operator>> (istream&, NamedRegister&);
  89.     };
  90.  
  91. #endif
  92.